package com.zm.blog.utils.storage;

import com.zm.blog.handle.BlogRuntimeException;
import org.springframework.util.StringUtils;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 枚举类StoreEnum，它定义了两种存储方式：七牛云（qiniu）和本地（local）
 */
public enum StoreEnum {

    QINIU("qiniu"),
    LOCAL("local");

    //使用 final 确保枚举值不可变
    private final String code;

    //缓存枚举项的 Map （code -> 枚举实例）
    private static final Map<String, StoreEnum> CODE_MAP;

    //静态初始化，预加载所有枚举项到 Map
    static {
        CODE_MAP = Arrays.stream(values()).collect(Collectors.toMap(
                StoreEnum::getCode, e -> e
        ));
    }

    StoreEnum(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    /**
     * 根据 code 查找对应的枚举值
     * @param code 存储平台编码
     * @return 匹配的枚举实例
     * @throws BlogRuntimeException 如果 code 无效或不存在
     */
    public static StoreEnum existCode(String code) {
        //检查输入有效性
        if (!StringUtils.hasText(code)) {
            throw new BlogRuntimeException("存储平台编码不能为空！");
        }

        //从缓存 Map 中查找（O(1) 时间复杂度）
        StoreEnum result = CODE_MAP.get(code);
        if (result == null) {
            throw new BlogRuntimeException("存储平台不支持：" + code);
        }
        return result;
    }

}
